package com.zhuwhao.sample.utils;

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;

/**
 * Created by Juno on 2017/1/17 0017.
 * 汉字转换为汉语拼音
 */
public class Cn2Spell {

    private static StringBuffer sb = new StringBuffer();

    /**
     * 获取汉字字符串的第一个字母，英文字符不变
     *
     * @param str 汉字
     * @return 第一个字母
     */
    public static String getPinYinFirstLetter(String str) {
        if (str == null || str.isEmpty())
            return "";

        sb.setLength(0);
        char c = str.charAt(0);
        String[] pinYinArr = PinyinHelper.toHanyuPinyinStringArray(c);
        if (pinYinArr != null) {
            sb.append(pinYinArr[0].charAt(0));
        } else {
            sb.append(c);
        }
        return sb.toString();
    }

    /**
     * 获取汉字字符串的首字母，英文字符不变
     *
     * @param str 汉字
     * @return 首字母
     */
    public static String getPinYinHeadChar(String str) {
        if (str == null || str.isEmpty())
            return "";

        sb.setLength(0);
        char[] chars = str.toCharArray();
        HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
        format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
        format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
        for (char c : chars) {
            if (c > 128) {
                try {
                    sb.append(PinyinHelper.toHanyuPinyinStringArray(c, format)[0].charAt(0));
                } catch (Exception e) {
                    e.printStackTrace();
                }
            } else {
                sb.append(c);
            }
        }
        return sb.toString();
    }

    /**
     * 获取汉字字符串的汉语拼音，英文字符不变
     *
     * @param str 汉字
     * @return 汉语拼音
     */
    public static String getPinYin(String str) {
        if (str == null || str.isEmpty())
            return "";

        sb.setLength(0);
        char[] chars = str.toCharArray();
        HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
        format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
        format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
        for (char c : chars) {
            if (c > 128) {
                try {
                    sb.append(PinyinHelper.toHanyuPinyinStringArray(c, format)[0]);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            } else {
                sb.append(c);
            }
        }
        return sb.toString();
    }
}